/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Logica;

import java.io.Serializable;
import java.util.ArrayList;

/**
 * La clase Tablero, representa el tablero dentro de una partida e implementa la
 * clase Serializable
 *
 * @author Julian
 */
public class Tablero implements Serializable {

    private static Tablero tablero = null;
    private Casilla[][] infoTablero = new Casilla[15][15];
    private Saco saco = new Saco();
    private ArrayList<Jugador> jugadores = new ArrayList<Jugador>();

    /**
     * Constructor por defecto de la clase Tablero
     */
    private Tablero() {
    }

    /**
     * Devuelve la instancia del tablero
     *
     * @return tablero de tipo Tablero. Es la instancia del tablero
     */
    public synchronized static Tablero getInstancia() {
        if (tablero == null) {
            tablero = new Tablero();
        }
        return tablero;
    }

    /**
     * Devuelve la informacion del tablero con los contenidos de las casillas.
     *
     * @return infoTablero de tipo Casilla[][]. Es la matriz de casillas en el tablero
     */
    public Casilla[][] getInfoTablero() {
        return infoTablero;
    }

    /**
     * Asigna la informacion del tablero con los contenidos de las casillas.
     *
     * @param infoTablero de tipo Casilla[][]. Es la matriz de casillas que se asignara al tablero
     */
    public void setInfoTablero(Casilla[][] infoTablero) {
        this.infoTablero = infoTablero;
    }

    /**
     * Devuelve los jugadores que estan en el tablero.
     *
     * @return the jugadores de tipo ArrayList de {@Jugador}. Son los jugadores asociados al tablero
     */
    public ArrayList<Jugador> getJugadores() {
        return jugadores;
    }

    /**
     * Asigna los jugadores que estan en el tablero.
     *
     * @param jugadores de tipo ArrayList de {@Jugador}. Son los jugadores que sera asociados al tablero
     */
    public void setJugadores(ArrayList<Jugador> jugadores) {
        this.jugadores = jugadores;
    }

    /**
     * Devuelve el saco de fichas restantes en la partida.
     *
     * @return the saco de tipo {@Saco}. Es la bolsa que contiene las fichas del tablero
     */
    public Saco getSaco() {
        return saco;
    }

    /**
     * Asigna el saco de fichas restantes en la partida.
     *
     * @param saco de tipo {@Saco}. Es la bolsa que contendra las fichas del tablero
     */
    public void setSaco(Saco saco) {
        this.saco = saco;
    }
}
